#include <iostream>
#include <algorithm>
#include <string>
#include <vector>
#include <unistd.h>
#include <thread>

using namespace std;

// struct Goods
// {
// 	string _name;  // 名字
// 	double _price; // 价格
// 	int _evaluate; // 评价
// 	Goods(const char *str, double price, int evaluate)
// 		: _name(str), _price(price), _evaluate(evaluate)
// 	{
// 	}
// };

// struct ComparePriceLess
// {
// 	bool operator()(const Goods &gl, const Goods &gr)
// 	{
// 		return gl._price < gr._price;
// 	}
// };

// struct ComparePriceGreater
// {
// 	bool operator()(const Goods &gl, const Goods &gr)
// 	{
// 		return gl._price > gr._price;
// 	}
// };

// int main()
// {
// 	vector<Goods> v = {{"苹果", 2.1, 5}, {"香蕉", 3, 4}, {"橙子", 2.2, 3}, {"菠萝", 1.5, 4}};
// 	auto priceless = [](const Goods &g1, const Goods &g2) -> bool
// 	{ return g1._price < g2._price; };
// 	sort(v.begin(), v.end(), priceless);
// 	sort(v.begin(), v.end(), [](const Goods &g1, const Goods g2) -> bool
// 		 { return g1._price > g2._price; });
// 	sort(v.begin(), v.end(), [](const Goods &g1, const Goods g2) -> bool
// 		 { return g1._evaluate < g2._evaluate; });
// 	sort(v.begin(), v.end(), [](const Goods &g1, const Goods g2) -> bool
// 		 { return g1._evaluate > g2._evaluate; });
// 	sleep(1);
// }

// int g_val = 0;

// auto swap3 = [](int& x, int& y)
// 	{
// 		int tmp = x;
// 		x = y;
// 		y = tmp;
// 	};

// int main()
// {
// 	int x, y;
// 	x = 1;
// 	y = 0;
// 	// 引用传参
// 	// auto swap1 = [](int &x, int &y)
// 	// {
// 	// 	int tmp = x;
// 	// 	x = y;
// 	// 	y = tmp;
// 	// };
// 	// swap1(x, y);
// 	static int j = 10;
// 	{
// 		static int k = 0;
// 	[&](int &x, int &y)
// 	{
// 		k = 10;
// 		j = 100;
// 		int tmp = x;
// 		x = y;
// 		y = tmp;
// 	}(x, y);
// 	cout << k << ":" << j << endl;
// 	}

// 	cout << x << ":" << y << endl; // 可以完成交换
// 	// 传值捕捉
// 	auto swap2 = [x, y]() mutable
// 	{
// 		int tmp = x;
// 		x = y;
// 		y = tmp;
// 	};
// 	swap2();
// 	cout << x << ":" << y << endl; // 不能完成交换
// 	// 传引用捕捉
// 	auto swap3 = [&x, &y]()
// 	{
// 		int tmp = x;
// 		x = y;
// 		y = tmp;
// 	};
// 	swap3();
// 	cout << x << ":" << y << endl; // 可以完成交换

// 	int m, n;
// 	// 全部传值捕捉
// 	auto func1 = [=]()
// 	{
// 		//......
// 	};
// 	// 全部传引用捕捉
// 	auto func2 = [&]()
// 	{
// 		//......
// 	};
// 	// 混合捕捉
// 	// x传值捕捉，y传引用捕捉
// 	auto func3 = [x, &y]()
// 	{
// 		//......
// 	};
// 	// x传值捕捉，其余的传引用捕捉
// 	auto func4 = [&, x]()
// 	{
// 		//......
// 	};
// }

// 在C++98标准下，实现可移植的多线程程序 —— 条件编译
//  #ifdef _WIN32
//  	CreateThread(); //在windows系统下，调用windows多线程接口
//  #elif __linux__
//  	pthread_create(); //在linux系统下，调用pthread线程库接口
//  #endif

// C++11中加入了thread线程库
// int main()
// {
// 	int m = 0;
// 	cin >> m;
// 	vector<thread> vthds(m); // 调用thread类的默认构造
// 	vector<int> nums(m, 0);
// 	for (auto &e : nums)
// 	{
// 		cin >> e;
// 	}

// 	for (int i = 0; i < m; ++i)
// 	{

// 		vthds[i] = thread([](int num)
// 						  {
// 			int sum = 0;
// 			for(int j = 1; j <= num; ++j)
// 			{
// 				sum += j;
// 			}
// 			cout << "[" << this_thread::get_id() << "]: " << sum << endl; },
// 						  nums[i]); // 调用thread类的移动赋值
// 	}

// 	for (auto &t : vthds) // thread类禁用拷贝构造，所以必须加引用
// 	{
// 		t.join();
// 	}
// }

void Test_mutable()
{
	int a = 10;
	int b = 8;
	[&]()->int
	{
		a=a+b;
		cout << a << endl;
		return a;
	}();
	// cout << Add() << endl;
	cout << a << endl;
}

int main()
{
	Test_mutable();
}
